#

| Chapter 6 Pattern Matching |

## 6.4 Examples of Searching

When used with `grep` or `egrep`, regular expressions are surrounded by quotes. (If the pattern contains a $, you must use single quotes; e.g., `'`pattern`'`.) When used with ed, ex, sed, and awk, regular expressions are usually surrounded by / (although any delimiter works). Here are some example patterns:

Pattern | What does it match?
--- | ---
bag | The string bag.
^bag | bag at beginning of line.
bag$ | bag at end of line.
^bag$ | bag as the only word on line.
[Bb]ag | Bag or bag.
b[aeiou]g | Second letter is a vowel.
b[^aeiou]g | Second letter is a consonant (or uppercase or symbol).
b.g | Second letter is any character.
^...$ | Any line containing exactly three characters.
^\. | Any line that begins with a dot.
^\.[a-z][a-z] | Same, followed by two lowercase letters (e.g., troff requests).
^\.[a-z]\{2\} | Same as previous, `grep` or sed only.
^[^.] | Any line that doesn't begin with a dot.
bugs* | bug, bugs, bugss, etc.
"word" | A word in quotes.
"*word"* | A word, with or without quotes.
[A-Z][A-Z]* | One or more uppercase letters.
[A-Z]+ | Same, `egrep` or awk only.
[A-Z].* | An uppercase letter, followed by zero or more characters.
[A-Z]* | Zero or more uppercase letters.
[a-zA-Z] | Any letter.
[^0-9A-Za-z] | Any symbol (not a letter or a number).

egrep or awk pattern | What does it match?
--- | ---
[567] | One of the numbers 5, 6, or 7.
five|six|seven | One of the words five, six, or seven.
80[23]?86 | 8086, 80286, or 80386
compan(y|ies) | company or companies

ex or vi pattern | What does it match?
--- | ---
\<the | Words like theater or the.
the\> | Words like breathe or the.
\<the\> | The word the.

sed or grep pattern | What does it match?
--- | ---
0\{5,\} | Five or more zeros in a row.
[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\} | Social security number (nnn-nn-nnnn).

### 6.4.1 Examples of Searching and Replacing

The following examples show the metacharacters available to sed or ex. Note that ex commands begin with a colon. A space is marked by a ; a tab is marked by tab.

Command | Result
--- | ---
s/.*/( & )/ | Redo the entire line, but add parentheses.
s/.*/mv & &.old/ | Change a wordlist (one word per line) into `mv` commands.
/^$/d | Delete blank lines.
:g/^$/d | Same as previous, in ex editor.
/^[`tab`]*$/d | Delete blank lines, plus lines containing spaces or tabs.
:g/^[`tab`]*$/d | Same as previous, in ex editor.
s/*//g | Turn one or more spaces into one space.
%s/*//g | Same as previous, in ex editor.
:s/[0-9]/Item &:/ | Turn a number into an item label (on the current line).
:s | Repeat the substitution on the first occurrence.
:& | Same as previous.
:sg | Same, but for all occurrences on the line.
:&g | Same as previous.
:%&g | Repeat the substitution globally.
:.,$s/Fortran/\U&/g | Change word to uppercase, on current line to last line.
:%s/.*/\L&/ | Lowercase entire file.
:s/\<./\u&/g | Uppercase first letter of each word on current line. (Useful for titles.)
:%s/yes/No/g | Globally change a word to No.
:%s/Yes/~/g | Globally change a different word to No (previous replacement).

Finally, some sed examples for transposing words. A simple transposition of two words might look like this:

>     s/die or do/do or die/	Transpose words.

The real trick is to use hold buffers to transpose variable patterns. For example:

>     s/\([Dd]ie\) or \([Dd]o\)/\2 or \1/	Transpose, using hold buffers.

6.3 Metacharacters |  | 7. The Emacs Editor